#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
int  main()
{
  //直接写入
  //const char *msg="hello world!\n";
  //write(1,msg,strlen(msg));
  //write(1,msg,strlen(msg));
  //write(1,msg,strlen(msg));
  //write(1,msg,strlen(msg));

  //读键盘
 // char buff[64];
 // ssize_t s=  read(0,buff,sizeof(buff));
 // buff[s-1]=0;
 // printf("echo# %s\n",buff);
 //
 //
 //验证文件描述符是最小的下标
 // close(0); 
 // int fd=open("./log.txt",O_CREAT|O_WRONLY,0644);
 // printf("fd:%d\n",fd);

 //重定向
// close(1);
// int fd=open("./log.txt",O_CREAT|O_WRONLY,0644);
//  printf("fd:%d\n",fd);
// fprintf(stdout,"tao\n");
// fprintf(stdout,"tao\n");
// fprintf(stdout,"tao\n"); 
// fprintf(stdout,"tao\n");
// fprintf(stdout,"tao\n");
// fprintf(stdout,"tao\n");
// fprintf(stdout,"tao\n");
 
 //追加重定向
 
 //close(1);
 //int fd=open("./log.txt",O_CREAT|O_WRONLY|O_APPEND,0644);
 // printf("fd:%d\n",fd);
 //fprintf(stdout,"tao\n");
 //fprintf(stdout,"tao\n");
 //fprintf(stdout,"tao\n"); 
 //fprintf(stdout,"tao\n");
 //fprintf(stdout,"tao\n");
 //fprintf(stdout,"tao\n");
 //fprintf(stdout,"tao\n");
 
 //输入重定向
// close(0);
// int fd=open("./log.txt",O_RDONLY);
//
// printf("fd:%d\n",fd);
// char line[128];
// while(fgets(line,sizeof(line)-1,stdin)){
//   printf("%s",line);
// }
//

// printf("stdin->%d\n",stdin->_fileno);
// printf("stdout->%d\n",stdout->_fileno);
// printf("stderr->%d\n",stderr->_fileno);
// FILE *fp=fopen("./log.txt","r");
// if(NULL==fp){
//   perror("fopen");
//   return  1;
// }
//
// printf("fp->%d\n",fp->_fileno);
//

  //用dup2系统调用实现重定向
  int fd=open("./log.txt",O_WRONLY|O_TRUNC);//O_TRUNC 清空了原来的内容
  if(fd<0){
    perror("open");
    return 1;
  }
  
  dup2(fd,0);//把本输入到显示器的内容，写入到文件

  printf("hello tao!\n");
  fprintf(stdout,"hello world!\n");
  fputs("hello xx!\n",stdout);




 // int fd=open("./log.txt",O_RDONLY);
 // if(fd<0){
 //   perror("open");
 //   return 1;
 // }
 // char buffer[1024];
 // ssize_t s=read(fd,buffer,sizeof(buffer)-1);
 // if(s>0){
 //   buffer[s]=0;
 //   printf("%s\n",buffer);
 // }


//  close(fd);
 // int fd=open("./log.txt",O_CREAT|O_WRONLY,0644);
 // if(fd<0){
 //   perror("open!\n");
 //   return 1;
 // }
 //  const char *msg="hello tao!\n";
 //  int cnt=3;
 //  while(cnt){
 //    write(fd,msg,strlen(msg));//写入文件过程不需要加入\0
 //    cnt--;
 //  }
 //  close(fd);
}
